package P072_NotOperateRootList;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @ClassName : NotOperateRootList
 * @Description : 生成子列表后不要操作原列表
 * @Author : wukj1
 * @Date: 2022/4/1
 **/
public class NotOperateRootList {

    @Test
    public void test(){
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        List<String> subList = list.subList(0, 2);
        //向原列表中添加一个元素
        list.add("D");

        System.out.println("原列表的长度：" + list.size());
        System.out.println("子列表的长度" + subList.size());
    }

    @Test
    public void test1(){
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        List<String> subList = list.subList(0, 2);
        //因为视图是动态生成的，生成子列表后再操作原列表，必然会导致 “试图” 的不稳定
        //有效方法：设置原列表为只读状态
        list = Collections.unmodifiableList(list);

        //对原列表进行只读操作，对子列表进行读写操作
        subList.add("D");
        subList.forEach(System.out::println);
        System.out.println("-----");
        list.forEach(System.out::println);

        //如果list有多个子列表，只要子列表多于一个，任何一个子列表都不能被修改
        List<String> subList1 = list.subList(0, 1);
        List<String> subList2 = list.subList(0, 1);
        subList1.add("E");
        subList2.add("F");

    }

}
